package com.chapter_4;

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

/**
 * @Author: Timo
 * @Date: 2019/5/15 11:50
 * @Description: 表示当前文件的数据
 */
public class Data {
    /**
     * 字段是执行保存的文件名称。
     */
    private String fileName;
    /**
     * 字段是表示数据内容的字符串，也就是写入文件的内容。
     */
    private String content;
    /**
     * 字段用于表示自上次保存之后， content 字段是否又进行了修改。
     */
    private boolean changed;

    public Data(String fileName, String content) {
        this.fileName = fileName;
        this.content = content;
        this.changed = Boolean.TRUE;
    }

    /**
     * 在 change 方法中，新的数据内容会被赋给 content 字段。
     * 同时， changed 标志会被设置为 true，这表示内容进行了修改。
     * @param newContent
     */
    public synchronized void change(String newContent) {
        this.content = newContent;
        changed = Boolean.TRUE;
    }


    /**
     * 对changed进行判断是否有新的内容进行修改，如果不是直接返回
     * @throws IOException
     */
    public synchronized void save() throws IOException {
        if (!changed) {
            // 因为此次操作内容没有更新
            System.out.println("Because the content of this operation has not been updated , so , not resave");
            return;
        }
        doSave();
        changed = Boolean.FALSE;
    }

    /**
     * 将内容写入文件中
     * @throws IOException
     */
    private void doSave() throws IOException {
        System.out.println(Thread.currentThread().getName()
                +" calls doSave, content is :"
                +(content.length() > 15 ? content.substring(0,15)+"..." : content)
        );
        Writer writer = new FileWriter(fileName);
        writer.write(content);
        writer.close();

    }
}
